<?php
class Slog_Config
{
	static private $_instance;
	
	private $config;
	
	public function __construct()
	{
	}
	
	static public function init()
	{
		$config = self::getInstance();
		
		// Configuración de Sloggy
		$C = $config->loadFromFile(SLOGGY_DIR . '/config.ini');
		
		// Configuración general del sitio
		$C = array_merge($C, $config->loadFromFile(SITE_DIR . '/config.ini'));
		
		// Configuración específica por dominio
		// Ejemplo: para blog.madrid.universidad.com => 1: com.ini, 2: universidad.com.ini, 3: madrid.universidad.com.ini, etc.
		$D = array();
		foreach (array_reverse(explode('.', $_SERVER['HTTP_HOST'])) as $subdomain) {
			array_push($D, $subdomain);
			$C = array_merge($C, $config->loadFromFile(SITE_DIR . '/' . implode('.', array_reverse($D)) . '.ini'));
		}
		
		$this->config = $C;
	}
	
	/**
	 * Devuelve una instancia de Slog_Config
	 *
	 * @return Slog_Config
	 */
	static public function getInstance()
	{
		return self::$_instance ? self::$_instance : (self::$_instance = new self());
	}
	
	/**
	 * Devuelve un valor
	 *
	 * @param string $token
	 * @param string $default
	 * @return string
	 */
	public function get($token, $default=null)
	{
		return isset($this->config[$token]) ? $this->config[$token] : $default;
	}
	
	public function getArray($token)
	{
		$data = array();
		$preg_token = str_replace('.', '\.', $token);
		
	    /*
	     * Ejemplo:
	     * $token = 'route.map';
	     * $config = [
	     * 		route.map.blog1.preg = '/^$/',
	     * 		route.map.blog1.default.controller = 'blog',
	     * ]
	     */
	    foreach ($this->config as $name=>$value) {
	        // Ej: $name = 'route.map.blog1.preg'
	        // Ej: $name = 'route.map.blog1.default.controller'
			if (preg_match('/^'.$preg_token.'\.(.*)$/', $name, $P)) {
				// Se encontró el elemento buscado
				
				$data[$P[1]] = $value;
			}
		}
		return $data;
	}
	
	public function loadFromFile($file)
	{
		return is_file($file) ? parse_ini_file($file) : array();		
	}

}

/**
 * @return	Slog_Config
 */
function config()
{
	return Slog_Config::getInstance();
}